package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {
	// 1、整型之间的转换 int8 int16 int32
	var x int8 = 10
	var y int16 = 20
	// fmt.Println(x+y)无法转换
	fmt.Println(x + int8(y))

	// 2、字符与整型之间的转换:标准库strconv
	var age = "32"
	//Atoi 字符串转int
	age2, _ := strconv.Atoi(age)
	fmt.Println(age2)
	//Itoa int转字符串
	age3 := strconv.Itoa(age2)
	fmt.Println(age3, reflect.TypeOf(age3))

	// 3、浮点型数字和字符串之间的转换
	// strconv parse系列函数
	// 将字符串转换为整型
	ret, _ := strconv.ParseInt("28", 10, 8)//10表示进制数。8表示bit
	fmt.Println(ret, reflect.TypeOf(ret))

	// 将字符串转换为浮点型
	ret2,_:= strconv.ParseFloat("3.141592653579",64)// 注意，这里32，最后也会变成64
	fmt.Println(ret2, reflect.TypeOf(ret2))

	// 将字符串转换为布尔型
	//它接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE；否则返回错误。
    b1, _ := strconv.ParseBool("true")
    fmt.Println(b1, reflect.TypeOf(b1))
    b2, _ := strconv.ParseBool("T")
    fmt.Println(b2, reflect.TypeOf(b2))
    b3, _ := strconv.ParseBool("1")
    fmt.Println(b3, reflect.TypeOf(b3))
    b4, _ := strconv.ParseBool("100")
    fmt.Println(b4, reflect.TypeOf(b4))

}
